home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok44.lha / Crypt / crypt.mod < prev    next >
Text File  |  1993-08-15  |  3KB  |  118 lines

  1. (**********************************************************************
  2.  
  3.     :Program.    Crypt
  4.     :Contents.   Verschlüsselt Dateien
  5.     :Author.     Steffen Reith
  6.     :Address.    Hessenstr. 64, D-8700 Würzburg
  7.     :Language.   Modula-2
  8.     :Translator. M2Amiga A+L V3.2d
  9.  
  10. **********************************************************************)
  11. MODULE Crypt;
  12.  
  13. FROM Arguments    IMPORT NumArgs,GetArg;
  14. FROM Dos          IMPORT Read,Write,Open,Close,FileHandlePtr,newFile,oldFile,
  15.                          Seek,beginning;
  16. FROM Terminal     IMPORT WriteString,WriteLn;
  17. FROM SYSTEM       IMPORT ADR,ADDRESS,BITSET,CAST;
  18. FROM Arts         IMPORT Terminate,TermProcedure;
  19. FROM RandomNumber IMPORT PutSeed,RND;
  20. FROM Exec         IMPORT Byte;
  21. FROM Str          IMPORT Compare;
  22.  
  23. CONST Kennung='Amiga CRYPT V1.0';
  24.       Max=1FFFH;
  25.  
  26. TYPE String=ARRAY[0..01FFH] OF CHAR;
  27.      Bu=ARRAY[0..Max] OF Byte;
  28.  
  29. VAR ArgLen,NArg,rn:INTEGER;
  30.     Buffer:Bu;
  31.     Length,Summe,Pos,i:LONGINT;
  32.     PrgName,a1,a2,a3,KennBuff:String;
  33.     In,Out:FileHandlePtr;
  34.     Flag:BOOLEAN;
  35.  
  36. PROCEDURE Eor(a,b:INTEGER):Byte;
  37.  
  38. VAR S1,S2,not,nota,notb,erg:BITSET;
  39.  
  40. BEGIN
  41.  S1:=CAST(BITSET,a);
  42.  S2:=CAST(BITSET,b);
  43.  not:=CAST(BITSET,-1);
  44.  nota:=not-S1;
  45.  notb:=not-S2;
  46.  erg:=(nota*S2)+(notb*S1);
  47.  RETURN Byte(CAST(INTEGER,erg))
  48. END Eor;
  49.  
  50. PROCEDURE CleanUp();
  51.  
  52. BEGIN
  53.  IF In#NIL THEN Close(In) END;
  54.  IF Out#NIL THEN Close(Out) END;
  55. END CleanUp;
  56.  
  57. BEGIN
  58.  TermProcedure(CleanUp);
  59.  GetArg(0,PrgName,ArgLen);
  60.  NArg:=NumArgs();
  61.  IF NArg=1 THEN
  62.   GetArg(1,a1,ArgLen);
  63.   IF (a1[0]='-') AND (a1[1]='h') THEN
  64.    WriteString('Usage : ');
  65.    WriteString(PrgName);
  66.    WriteString(' key File1 File2 ');WriteLn
  67.   ELSE
  68.    WriteString('Unknown Option! ');WriteLn;
  69.    WriteString('Type ');
  70.    WriteString(PrgName);
  71.    WriteString(' -h for help ');
  72.    WriteLn
  73.   END;  
  74.  ELSIF (NArg=3) THEN  
  75.   GetArg(2,a2,ArgLen);
  76.   GetArg(3,a3,ArgLen);
  77.   In:=Open(ADR(a2),oldFile);
  78.   IF In=NIL THEN
  79.    WriteString('Can not find ');
  80.    WriteString(a2);WriteLn;
  81.    Terminate(0)
  82.   END;
  83.   Out:=Open(ADR(a3),newFile);
  84.   IF Out=NIL THEN
  85.    WriteString('Can not open ');
  86.    WriteString(a3);WriteString(' as outputfile!');WriteLn;
  87.    Terminate(0)
  88.   END;
  89.   GetArg(1,a1,ArgLen);
  90.   Summe:=0;
  91.   FOR i:=0 TO ArgLen DO
  92.    Summe:=(Summe+LONGINT(a1[i])) MOD 07735A000H;(* Es gibt ca. 2E9 Schluessel *)
  93.   END;
  94.   PutSeed(Summe);
  95.   Length:=Read(In,ADR(KennBuff),SIZE(Kennung));
  96.   IF ABS(Compare(KennBuff,Kennung))#0 THEN
  97.    (* Uncodiertes File *)
  98.    Pos:=Seek(In,0,beginning); (* Zeiger richtig positionieren *)
  99.    Length:=Write(Out,ADR(Kennung),SIZE(Kennung))
  100.   END;
  101.   LOOP
  102.    Length:=Read(In,ADR(Buffer),SIZE(Buffer));
  103.    IF Length=0 THEN EXIT END;
  104.    FOR i:=0 TO Length-1 DO
  105.     rn:=RND(0100H)-080H;
  106.     Buffer[i]:=Eor(INTEGER(Buffer[i]),rn)
  107.    END;
  108.    Length:=Write(Out,ADR(Buffer),Length)
  109.   END
  110.  ELSE
  111.   WriteString('Illegal number of Arguments !');WriteLn;
  112.   WriteString('Type ');
  113.   WriteString(PrgName);
  114.   WriteString(' -h for help ');
  115.   WriteLn
  116.  END
  117. END Crypt. 
  118.